Repository navigation
Conversation
* added bypass logic to create template_pair from 6 tables, fallback for hard filters * Removed batching, checking against per pair * follow try-with-resources design * unit tests for the bypass logic * Fix cross-zone template lookup in listTemplates Phase 2 When temp_zone_pair has dcId=0 (cross-zone template with no data_center), use IS NULL predicate instead of broken EQ/IN with literal 0 which never matches NULL rows. * Add filter for non-root domain-admin users --------- Co-authored-by: anishadas <adas33@apple.com> Co-authored-by: Aaron Chung <aaron_chung@apple.com>
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## 4.22 #13566 +/- ##
==========================================
Coverage 18.00% 18.00%
- Complexity 16219 16230 +11
==========================================
Files 5936 5937 +1
Lines 535716 536058 +342
Branches 65596 65670 +74
==========================================
+ Hits 96459 96531 +72
- Misses 428268 428511 +243
- Partials 10989 11016 +27
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
…ove-listtemplates-perf
|
@blueorangutan package |
|
@vladimirpetrov a [SL] Jenkins job has been kicked to build packages. It will be bundled with KVM, XenServer and VMware SystemVM templates. I'll keep you posted as I make progress. |
|
Packaging result [SF]: ✔️ el8 ✔️ el9 ✔️ el10 ✔️ debian ✔️ suse15. SL-JID 18552 |
|
thanks @Pearl1594 , do you have any performance figures? (before vs. after?) |
…unt is correct, but lists all templates
|
|
@blueorangutan test |
|
@vladimirpetrov a [SL] Trillian-Jenkins test job (ol8 mgmt + kvm-ol8) has been kicked to run smoke tests |
|
[SF] Trillian Build Failed (tid-16613) |
|
@blueorangutan test |
|
@Pearl1594 a [SL] Trillian-Jenkins test job (ol8 mgmt + kvm-ol8) has been kicked to run smoke tests |
|
[SF] Trillian Build Failed (tid-16615) |
|
@blueorangutan package |
|
@vladimirpetrov a [SL] Jenkins job has been kicked to build packages. It will be bundled with KVM, XenServer and VMware SystemVM templates. I'll keep you posted as I make progress. |
|
Packaging result [SF]: ✔️ el8 ✔️ el9 ✔️ el10 ✔️ debian ✔️ suse15. SL-JID 18696 |
|
@Pearl1594 can you look at the comments/suggestions? |
There was a problem hiding this comment.
Took the help of AI in testing
cc @Pearl1594 @nvazquez
shell scripts
whichpath-pr13566.sh
compare-pr13566.sh
setup-pr13566.sh
Test results for template.list.bypass.view
Tested on a KVM environment with the PR build: 2 zones, about 118 templates and 8 ISOs.
Test data. Owned by root admin, a domain admin, users in a child domain and a user in an unrelated domain, plus a project (owner, member and non-member). The templates include:
- public/featured, private, cross-zone and multi-zone
- direct-download
- one in an error state (failed download)
- one with tags
- one deleted
- one shared with another account
- bootable and non-bootable ISOs
- direct-download bulk templates to give paging something to work on
Method. listTemplates/listIsos calls covering these filters: all, executable, self, selfexecutable, featured, community, shared and sharedexecutable. They also cover zoneid, isready, keyword, name, hypervisor, id/ids, paging, showunique, templatetype, bootable, ispublic, projectid=<id>/-1, tags and showremoved.
Each call ran once with the flag set to false and once set to true,
I compared count plus id, name, zoneid, isready and projectid for every row.
I used the MySQL general log to check which query actually ran: AS distinct_key means the new SQL, and SELECT DISTINCT temp_zone_pair / template_view.id FROM template_view means the old view.
Routing works as intended. With the flag on, all (admin), executable, self/selfexecutable, ISOs and project-scoped calls use the new SQL. featured, community, shared, sharedexecutable, tags, showremoved and non-admin all with projectid=-1 stay on the view.
Results match in 51 of 53 cases. The two mismatches are below.
1. templatetype (system and probably isvnf / forcks) is ignored on the new path
cmk list templates templatefilter=all templatetype=SYSTEM
flag=false -> count 2
flag=true -> count 118 (every template)
templateChecks() adds templateType, isVnf and forCks to the SearchCriteria, but buildTemplateListFilter() doesn't take them, and TemplateListFilter has no fields for them. The new SQL drops these filters without any error. I didn't test isvnf or forcks, but reading the code they hit the same gap. The UI uses both: isvnf for the VNF template lists and forcks for CKS node templates.
Suggested fix: add these fields to TemplateListFilter and appendCommonWhere() (vt.type = ?, vt.type = 'VNF' / != 'VNF', vt.for_cks = ?). Or, at minimum, make canBypass() return false when any of them is set.
2. showunique=true with paging returns different templates on a page
cmk list templates templatefilter=all page=2 pagesize=10 showunique=true
The count is the same, but page 2 has different templates. With the flag on, ptest-domadmin-public and ptest-user1-private appear on page 2. They don't appear there with the flag off.
The view path always sorts by sort_key, temp_zone_pair, which is the "<id>_<zone>" string. With showUnique, the new SQL sorts by sort_key, distinct_key, where distinct_key is the numeric vt.id. When sort_key ties (all templates here have 0), the two orders differ ("10_1" < "9_1" but 9 < 10), so the page boundaries move. Without showunique, both paths sort by the same string, and paging matched (I checked pages 1 and 4).
Suggested fix: always use CONCAT(vt.id, '_', IFNULL(dc.id, 0)) as the second sort column, even when the SELECT key is vt.id.
3. Possible gap: EXTERNAL format with onlyReady (from reading the code, not tested)
The view path treats ImageFormat.BAREMETAL and ImageFormat.EXTERNAL as ready:
readySc.addOr("format", SearchCriteria.Op.IN, ImageFormat.BAREMETAL, ImageFormat.EXTERNAL);The new SQL only has vt.format = 'BAREMETAL'. With the flag on, EXTERNAL-format templates (Extensions) would likely disappear from isready=true / executable lists.
4. Description and comments are out of date: domain-admin self
The description says self/selfexecutable for DOMAIN_ADMIN/RESOURCE_DOMAIN_ADMIN falls back to the view. In practice they run on the new SQL: domainPathLike is set without requiresViewFallback, canBypass() doesn't check it, and the SQL handles domain.path LIKE ?. Results matched in my tests, so the behaviour looks correct. The PR description, the Javadoc on buildTemplateListFilter / findDistinctTempZonePairs, and the IllegalArgumentException message (which lists domainPath as unsupported) should be updated to match.
Suggested test additions. Add unit tests covering templatetype, isvnf, forcks and EXTERNAL + onlyReady on the new path, and one that pages through showunique=true and checks that the IDs on each page match the view path.
… format and view-consistent showunique paging Add templateType, isVnf and forCks to TemplateListFilter and the bypass WHERE clause, treat EXTERNAL like BAREMETAL for onlyReady, and tie-break showunique pages on CONCAT(vt.id, '_') so page boundaries match the view path. Update stale domainPath fallback comments and add unit tests.
|
@kiranchavala Ive addressed the comments. Thanks for the review. |
|
@blueorangutan package |
|
@kiranchavala a [SL] Jenkins job has been kicked to build packages. It will be bundled with KVM, XenServer and VMware SystemVM templates. I'll keep you posted as I make progress. |
|
Packaging result [SF]: ✔️ el8 ✔️ el9 ✔️ el10 ✔️ debian ✔️ suse15. SL-JID 19407 |
kiranchavala
left a comment
There was a problem hiding this comment.
LGTM, thanks @Pearl1594
Retested with the same scripts mentioned this time, there were no issue observed
[root@ref-trl-12451-k-Mol8-kiran-chavala-mgmt1 ~]# ./compare-pr13566.sh
ok [ 0] (118 rows) admin|list templates|templatefilter=all listall=true
ok [ 1] (114 rows) admin|list templates|templatefilter=all listall=true showunique=true
ok [ 2] (113 rows) admin|list templates|templatefilter=executable
ok [ 3] (109 rows) admin|list templates|templatefilter=self
ok [ 4] (108 rows) admin|list templates|templatefilter=selfexecutable
ok [ 5] (114 rows) admin|list templates|templatefilter=all zoneid=7d92ff42-df64-4fe7-bc01-3e7472daed48
ok [ 6] (109 rows) admin|list templates|templatefilter=executable zoneid=7d92ff42-df64-4fe7-bc01-3e7472daed48 isready=true
ok [ 7] (9 rows) admin|list templates|templatefilter=all keyword=ptest-admin
ok [ 8] (1 rows) admin|list templates|templatefilter=all name=ptest-admin-private
ok [ 9] (118 rows) admin|list templates|templatefilter=all hypervisor=KVM
ok [10] (2 rows) admin|list templates|templatefilter=all id=85b71ad9-4003-4a16-9a12-de3a2c9b972f
ok [11] (1 rows) admin|list templates|templatefilter=all id=ffed8a33-44da-48be-a205-206dff83a9cf
ok [12] (3 rows) admin|list templates|templatefilter=all ids=9baac9db-13e4-4039-994e-c8d1c5d65ca7,8d5b7b1d-16f3-44eb-9844-1a37a05a3769,5df65029-54e3-4946-bce6-0a8f72874692
ok [13] (118 rows) admin|list templates|templatefilter=all page=1 pagesize=10
ok [14] (118 rows) admin|list templates|templatefilter=all page=4 pagesize=10
ok [15] (114 rows) admin|list templates|templatefilter=all page=2 pagesize=10 showunique=true
ok [16] (2 rows) admin|list templates|templatefilter=all templatetype=SYSTEM
ok [17] (8 rows) admin|list isos|isofilter=all listall=true
ok [18] (4 rows) admin|list isos|isofilter=executable bootable=true
ok [19] (8 rows) admin|list isos|isofilter=all ispublic=true
ok [20] (6 rows) admin|list isos|isofilter=all isready=true zoneid=7d92ff42-df64-4fe7-bc01-3e7472daed48
ok [21] (2 rows) admin|list isos|isofilter=all id=13ce9eca-9caf-4422-bc8d-7a3988d89b65
ok [22] (63 rows) domadmin|list templates|templatefilter=executable
ok [23] (64 rows) domadmin|list templates|templatefilter=all
ok [24] (64 rows) domadmin|list templates|templatefilter=all listall=true
ok [25] (2 rows) domadmin|list templates|templatefilter=self
ok [26] (6 rows) domadmin|list isos|isofilter=executable
ok [27] (2 rows) user|list templates|templatefilter=self
ok [28] (2 rows) user|list templates|templatefilter=selfexecutable
ok [29] (63 rows) user|list templates|templatefilter=executable
ok [30] (59 rows) user|list templates|templatefilter=executable zoneid=7d92ff42-df64-4fe7-bc01-3e7472daed48 isready=true
ok [31] (7 rows) user|list isos|isofilter=executable
ok [32] (63 rows) user3|list templates|templatefilter=executable
ok [33] (1 rows) user3|list templates|templatefilter=self
ok [34] (3 rows) user|list templates|templatefilter=self projectid=a0219e40-2615-4285-8501-244af613ba05
ok [35] (65 rows) user|list templates|templatefilter=executable projectid=a0219e40-2615-4285-8501-244af613ba05
ok [36] (3 rows) user|list templates|templatefilter=executable projectid=-1
ok [37] (1 rows) user|list isos|isofilter=self projectid=a0219e40-2615-4285-8501-244af613ba05
ok [38] (3 rows) user2|list templates|templatefilter=self projectid=a0219e40-2615-4285-8501-244af613ba05
ok [39] (65 rows) user2|list templates|templatefilter=executable projectid=a0219e40-2615-4285-8501-244af613ba05
ok [40] (3 rows) user2|list templates|templatefilter=executable projectid=-1
ok [41] (0 rows) user3|list templates|templatefilter=executable projectid=a0219e40-2615-4285-8501-244af613ba05
ok [42] (64 rows) domadmin|list templates|templatefilter=all projectid=-1
ok [43] (3 rows) domadmin|list templates|templatefilter=self projectid=a0219e40-2615-4285-8501-244af613ba05
ok [44] (121 rows) admin|list templates|templatefilter=all projectid=-1
ok [45] (121 rows) admin|list templates|templatefilter=all projectid=a0219e40-2615-4285-8501-244af613ba05
ok [46] (1 rows) admin|list templates|templatefilter=all id=c8fea57d-5801-4d4b-ac27-41adc1d31c3e
ok [47] (3 rows) admin|list templates|templatefilter=featured
ok [48] (58 rows) admin|list templates|templatefilter=community
ok [49] (1 rows) user2|list templates|templatefilter=shared
ok [50] (1 rows) user2|list templates|templatefilter=sharedexecutable
ok [51] (1 rows) admin|list templates|templatefilter=all tags[0].key=env tags[0].value=pr13566
ok [52] (1 rows) admin|list templates|templatefilter=all showremoved=true id=fb2765c4-2c68-49e6-b057-9b4f8a2ba9af
[root@ref-trl-12451-k-Mol8-kiran-chavala-mgmt1 ~]# MYSQL="mysql -u root" BYPASS=true ./whichpath-pr13566.sh
BYPASS [ 0] admin|list templates|templatefilter=all listall=true
BYPASS [ 1] admin|list templates|templatefilter=all listall=true showunique=true
BYPASS [ 2] admin|list templates|templatefilter=executable
BYPASS [ 3] admin|list templates|templatefilter=self
BYPASS [ 4] admin|list templates|templatefilter=selfexecutable
BYPASS [ 5] admin|list templates|templatefilter=all zoneid=7d92ff42-df64-4fe7-bc01-3e7472daed48
BYPASS [ 6] admin|list templates|templatefilter=executable zoneid=7d92ff42-df64-4fe7-bc01-3e7472daed48 isready=true
BYPASS [ 7] admin|list templates|templatefilter=all keyword=ptest-admin
BYPASS [ 8] admin|list templates|templatefilter=all name=ptest-admin-private
BYPASS [ 9] admin|list templates|templatefilter=all hypervisor=KVM
BYPASS [10] admin|list templates|templatefilter=all id=85b71ad9-4003-4a16-9a12-de3a2c9b972f
BYPASS [11] admin|list templates|templatefilter=all id=ffed8a33-44da-48be-a205-206dff83a9cf
BYPASS [12] admin|list templates|templatefilter=all ids=9baac9db-13e4-4039-994e-c8d1c5d65ca7,8d5b7b1d-16f3-44eb-9844-1a37a05a3769,5df65029-54e3-4946-bce6-0a8f72874692
BYPASS [13] admin|list templates|templatefilter=all page=1 pagesize=10
BYPASS [14] admin|list templates|templatefilter=all page=4 pagesize=10
BYPASS [15] admin|list templates|templatefilter=all page=2 pagesize=10 showunique=true
BYPASS [16] admin|list templates|templatefilter=all templatetype=SYSTEM
BYPASS [17] admin|list isos|isofilter=all listall=true
BYPASS [18] admin|list isos|isofilter=executable bootable=true
BYPASS [19] admin|list isos|isofilter=all ispublic=true
BYPASS [20] admin|list isos|isofilter=all isready=true zoneid=7d92ff42-df64-4fe7-bc01-3e7472daed48
BYPASS [21] admin|list isos|isofilter=all id=13ce9eca-9caf-4422-bc8d-7a3988d89b65
BYPASS [22] domadmin|list templates|templatefilter=executable
BYPASS [23] domadmin|list templates|templatefilter=all
BYPASS [24] domadmin|list templates|templatefilter=all listall=true
BYPASS [25] domadmin|list templates|templatefilter=self
BYPASS [26] domadmin|list isos|isofilter=executable
BYPASS [27] user|list templates|templatefilter=self
BYPASS [28] user|list templates|templatefilter=selfexecutable
BYPASS [29] user|list templates|templatefilter=executable
BYPASS [30] user|list templates|templatefilter=executable zoneid=7d92ff42-df64-4fe7-bc01-3e7472daed48 isready=true
BYPASS [31] user|list isos|isofilter=executable
BYPASS [32] user3|list templates|templatefilter=executable
BYPASS [33] user3|list templates|templatefilter=self
BYPASS [34] user|list templates|templatefilter=self projectid=a0219e40-2615-4285-8501-244af613ba05
BYPASS [35] user|list templates|templatefilter=executable projectid=a0219e40-2615-4285-8501-244af613ba05
BYPASS [36] user|list templates|templatefilter=executable projectid=-1
BYPASS [37] user|list isos|isofilter=self projectid=a0219e40-2615-4285-8501-244af613ba05
BYPASS [38] user2|list templates|templatefilter=self projectid=a0219e40-2615-4285-8501-244af613ba05
BYPASS [39] user2|list templates|templatefilter=executable projectid=a0219e40-2615-4285-8501-244af613ba05
BYPASS [40] user2|list templates|templatefilter=executable projectid=-1
NONE(error?) [41] user3|list templates|templatefilter=executable projectid=a0219e40-2615-4285-8501-244af613ba05
VIEW [42] domadmin|list templates|templatefilter=all projectid=-1
BYPASS [43] domadmin|list templates|templatefilter=self projectid=a0219e40-2615-4285-8501-244af613ba05
BYPASS [44] admin|list templates|templatefilter=all projectid=-1
BYPASS [45] admin|list templates|templatefilter=all projectid=a0219e40-2615-4285-8501-244af613ba05
BYPASS [46] admin|list templates|templatefilter=all id=c8fea57d-5801-4d4b-ac27-41adc1d31c3e
VIEW [47] admin|list templates|templatefilter=featured
VIEW [48] admin|list templates|templatefilter=community
VIEW [49] user2|list templates|templatefilter=shared
VIEW [50] user2|list templates|templatefilter=sharedexecutable
VIEW [51] admin|list templates|templatefilter=all tags[0].key=env tags[0].value=pr13566
NONE(error?) [52] admin|list templates|templatefilter=all showremoved=true id=fb2765c4-2c68-49e6-b057-9b4f8a2ba9af
[root@ref-trl-12451-k-Mol8-kiran-chavala-mgmt1 ~]# MYSQL="mysql -u root" BYPASS=false ./whichpath-pr13566.sh
VIEW [ 0] admin|list templates|templatefilter=all listall=true
VIEW [ 1] admin|list templates|templatefilter=all listall=true showunique=true
VIEW [ 2] admin|list templates|templatefilter=executable
VIEW [ 3] admin|list templates|templatefilter=self
VIEW [ 4] admin|list templates|templatefilter=selfexecutable
VIEW [ 5] admin|list templates|templatefilter=all zoneid=7d92ff42-df64-4fe7-bc01-3e7472daed48
VIEW [ 6] admin|list templates|templatefilter=executable zoneid=7d92ff42-df64-4fe7-bc01-3e7472daed48 isready=true
VIEW [ 7] admin|list templates|templatefilter=all keyword=ptest-admin
VIEW [ 8] admin|list templates|templatefilter=all name=ptest-admin-private
VIEW [ 9] admin|list templates|templatefilter=all hypervisor=KVM
VIEW [10] admin|list templates|templatefilter=all id=85b71ad9-4003-4a16-9a12-de3a2c9b972f
VIEW [11] admin|list templates|templatefilter=all id=ffed8a33-44da-48be-a205-206dff83a9cf
VIEW [12] admin|list templates|templatefilter=all ids=9baac9db-13e4-4039-994e-c8d1c5d65ca7,8d5b7b1d-16f3-44eb-9844-1a37a05a3769,5df65029-54e3-4946-bce6-0a8f72874692
VIEW [13] admin|list templates|templatefilter=all page=1 pagesize=10
VIEW [14] admin|list templates|templatefilter=all page=4 pagesize=10
VIEW [15] admin|list templates|templatefilter=all page=2 pagesize=10 showunique=true
VIEW [16] admin|list templates|templatefilter=all templatetype=SYSTEM
VIEW [17] admin|list isos|isofilter=all listall=true
VIEW [18] admin|list isos|isofilter=executable bootable=true
VIEW [19] admin|list isos|isofilter=all ispublic=true
VIEW [20] admin|list isos|isofilter=all isready=true zoneid=7d92ff42-df64-4fe7-bc01-3e7472daed48
VIEW [21] admin|list isos|isofilter=all id=13ce9eca-9caf-4422-bc8d-7a3988d89b65
VIEW [22] domadmin|list templates|templatefilter=executable
VIEW [23] domadmin|list templates|templatefilter=all
VIEW [24] domadmin|list templates|templatefilter=all listall=true
VIEW [25] domadmin|list templates|templatefilter=self
VIEW [26] domadmin|list isos|isofilter=executable
VIEW [27] user|list templates|templatefilter=self
VIEW [28] user|list templates|templatefilter=selfexecutable
VIEW [29] user|list templates|templatefilter=executable
VIEW [30] user|list templates|templatefilter=executable zoneid=7d92ff42-df64-4fe7-bc01-3e7472daed48 isready=true
VIEW [31] user|list isos|isofilter=executable
VIEW [32] user3|list templates|templatefilter=executable
VIEW [33] user3|list templates|templatefilter=self
VIEW [34] user|list templates|templatefilter=self projectid=a0219e40-2615-4285-8501-244af613ba05
VIEW [35] user|list templates|templatefilter=executable projectid=a0219e40-2615-4285-8501-244af613ba05
VIEW [36] user|list templates|templatefilter=executable projectid=-1
VIEW [37] user|list isos|isofilter=self projectid=a0219e40-2615-4285-8501-244af613ba05
VIEW [38] user2|list templates|templatefilter=self projectid=a0219e40-2615-4285-8501-244af613ba05
VIEW [39] user2|list templates|templatefilter=executable projectid=a0219e40-2615-4285-8501-244af613ba05
VIEW [40] user2|list templates|templatefilter=executable projectid=-1
NONE(error?) [41] user3|list templates|templatefilter=executable projectid=a0219e40-2615-4285-8501-244af613ba05
VIEW [42] domadmin|list templates|templatefilter=all projectid=-1
VIEW [43] domadmin|list templates|templatefilter=self projectid=a0219e40-2615-4285-8501-244af613ba05
VIEW [44] admin|list templates|templatefilter=all projectid=-1
VIEW [45] admin|list templates|templatefilter=all projectid=a0219e40-2615-4285-8501-244af613ba05
VIEW [46] admin|list templates|templatefilter=all id=c8fea57d-5801-4d4b-ac27-41adc1d31c3e
VIEW [47] admin|list templates|templatefilter=featured
VIEW [48] admin|list templates|templatefilter=community
VIEW [49] user2|list templates|templatefilter=shared
VIEW [50] user2|list templates|templatefilter=sharedexecutable
VIEW [51] admin|list templates|templatefilter=all tags[0].key=env tags[0].value=pr13566
NONE(error?) [52] admin|list templates|templatefilter=all showremoved=true id=fb2765c4-2c68-49e6-b057-9b4f8a2ba9af
| ListProjectResourcesCriteria listProjectResourcesCriteria, | ||
| Map<String, String> tags, boolean showRemovedTmpl, Long parentTemplateId, | ||
| Boolean showUnique, String templateType, Boolean isVnf, Boolean forCks) { | ||
| TemplateListFilter.Builder b = TemplateListFilter.builder() |
There was a problem hiding this comment.
should the fast path also handle the arch, os category, extension, storage and image store filters? looks like it drops them and returns every template
| b.publicTemplate(Boolean.TRUE); | ||
| b.featured(templateFilter == TemplateFilter.featured ? Boolean.TRUE : Boolean.FALSE); | ||
| b.requiresViewFallback(true); | ||
| } else if (templateFilter == TemplateFilter.self || templateFilter == TemplateFilter.selfexecutable) { |
There was a problem hiding this comment.
what happens if an admin passes domainid or isrecursive=false with templatefilter=self? looks like the fast path ignores both


Description
This PR Adds a fast-path for listTemplates Phase 1 that bypasses template_view,
behind a runtime config flag (default off).
Why
The captured incident query against template_view runs 7,000+ seconds and
drains the DB pool. View materializes ~71k rows for ~4.7k templates due to
LEFT-JOIN row multiplication, OR-join on data_center, and predicates on a
computed column. Phase 1 only needs 6 of the 13 tables.
What changed
BypassTemplateViewConfigKey (template.list.bypass.view, defaultfalse,Global, runtime-toggleable).
TemplateListFilterPOJO +canBypass()predicate.TemplateJoinDao.findDistinctTempZonePairs(filter)— hand-tuned SQL overvm_template + account + template_store_ref + image_store + template_zone_ref
COALESCE.QueryManagerImplbuilds the filter and dispatches to bypass when flag ison AND
canBypass()is true. Otherwise falls through to existing path.showuniquepages tie-break on the same"<id>_"string order as the view path,so page boundaries match with the flag on or off.
Coverage
Bypass handles:
id,name,keyword,hypervisor,format,type,templatetype,isvnf,forcks,public,featured,bootable,parenttemplateid,accountType,accountIdIN,zoneid,templateState,removed,onlyReady(Ready, BAREMETAL/EXTERNAL format, or ISO + PERHOST),showunique, pagination,templatefilter∈ {self/selfexecutable(including DOMAIN_ADMIN/RESOURCE_DOMAIN_ADMIN, scoped via
domain.path LIKE),executable,all(admin; non-admin without project resources)}.Falls back to view path:
tags,showremoved,templatefilter∈ {featured,community,sharedexecutable,shared,allnon-admin with projectresources (e.g.
projectid=-1)}.Types of changes
Feature/Enhancement Scale or Bug Severity
Feature/Enhancement Scale
Bug Severity
Screenshots (if appropriate):
How Has This Been Tested?
How did you try to break this feature and the system with this change?